#include <iostream>
#include "../../../src/FTensor.hpp"
#include "../test_for_zero.hpp"
using namespace FTensor;
using namespace std;

void test_T2_01(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1);
void test_T2_02(Tensor1<double,3> &t1_1, const Tensor1<double,3> &,
                Tensor2<double,3,3> &t2_1);
void test_T2_03(Tensor2<double,3,3> &t2_1);
void test_T2_04(Tensor2<double,3,3> &t2_1);
void test_T2_05(Tensor2<double,3,3> &t2_1);
void test_T2_06(Tensor2<double,3,3> &t2_1);
void test_T2_07(Tensor2<double,3,3> &t2_1);
void test_T2_08(const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1);
void test_T2_09(Tensor2<double,3,3> &t2_1);
void test_T2_10(Tensor2<double,3,3> &t2_1);
void test_T2_11(Tensor2<double,3,3> &t2_1);
void test_T2_12(Tensor2<double,3,3> &t2_1);
void test_T2_13(Tensor1<double,3> &t1_1,
                Tensor2<double,3,3> &t2_1);
void test_T2_14(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_15(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_16(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_17(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_18(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_19(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_20(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_21(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_22(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_23(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
                const Tensor2<double,3,3> &t2_2);
void test_T2_24(const Tensor1<double,3> &t1_2,
                const Tensor2<double,3,3> &t2_2);
void test_T2_25(Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_26(Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2,
                const Tensor2<double,3,3> &t2_3);
void test_T2_27(Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2,
                const Tensor2<double,3,3> &t2_3);
void test_T2_28(Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2,
                const Tensor2<double,3,3> &t2_3);
void test_T2_29(Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2,
                const Tensor2<double,3,3> &t2_3);
void test_T2_30(const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_31(const Tensor1<double,3> &t1_2,
                Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_32(Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_33(Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2);
void test_T2_34(Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2,
                Tensor2_symmetric<double,3> &t2s_1);
void test_T2_35(Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2,
                Tensor2_symmetric<double,3> &t2s_1);
void test_T2_36(Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2,
                Tensor2_symmetric<double,3> &t2s_1);
void test_T2_37(Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2,
                Tensor2_symmetric<double,3> &t2s_1);
void test_T2_38();

void test_T2(Tensor1<double,3> &t1_1, const Tensor1<double,3> &t1_2,
	     Tensor2<double,3,3> &t2_1, const Tensor2<double,3,3> &t2_2,
	     const Tensor2<double,3,3> &t2_3,
	     Tensor2_symmetric<double,3> &t2s_1)
{
  test_T2_01(t1_1,t1_2,t2_1);
  test_T2_02(t1_1,t1_2,t2_1);
  test_T2_03(t2_1);
  test_T2_04(t2_1);
  test_T2_05(t2_1);
  test_T2_06(t2_1);
  test_T2_07(t2_1);
  test_T2_08(t1_2,t2_1);
  test_T2_09(t2_1);
  test_T2_10(t2_1);
  test_T2_11(t2_1);
  test_T2_12(t2_1);
  test_T2_13(t1_1,t2_1);
  test_T2_14(t1_1,t1_2,t2_1,t2_2);
  test_T2_15(t1_1,t1_2,t2_1,t2_2);
  test_T2_16(t1_1,t1_2,t2_1,t2_2);
  test_T2_17(t1_1,t1_2,t2_1,t2_2);
  test_T2_18(t1_1,t1_2,t2_1,t2_2);
  test_T2_19(t1_1,t1_2,t2_1,t2_2);
  test_T2_20(t1_1,t1_2,t2_1,t2_2);
  test_T2_21(t1_1,t1_2,t2_1,t2_2);
  test_T2_22(t1_1,t1_2,t2_1,t2_2);
  test_T2_23(t1_1,t1_2,t2_2);
  test_T2_24(t1_2,t2_2);
  test_T2_25(t2_1,t2_2);
  test_T2_26(t2_1,t2_2,t2_3);
  test_T2_27(t2_1,t2_2,t2_3);
  test_T2_28(t2_1,t2_2,t2_3);
  test_T2_29(t2_1,t2_2,t2_3);
  test_T2_30(t1_2,t2_1,t2_2);
  test_T2_31(t1_2,t2_1,t2_2);
  test_T2_32(t2_1,t2_2);
  test_T2_33(t2_1,t2_2);
  test_T2_34(t2_1,t2_2,t2s_1);
  test_T2_35(t2_1,t2_2,t2s_1);
  test_T2_36(t2_1,t2_2,t2s_1);
  test_T2_37(t2_1,t2_2,t2s_1);
  test_T2_38();
}
